﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Resources;
using System.IO;

namespace Bainder
{
    public class Bain
    {
        public CompilerResults Compilar(string archivoPrincipal, List<string> archivos, string archivoSalida)
        {
            string resPath = Environment.CurrentDirectory + @"\xxx.resources";

            using (ResourceWriter rw = new ResourceWriter(resPath))
            {
                string[] array = archivoPrincipal.Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);
                string nombre = array[array.Length - 1];

                FileInfo concha = new FileInfo(archivoPrincipal);
                rw.AddResource(nombre, Convert.ToBase64String(File.ReadAllBytes(concha.FullName)));

                foreach (string archivo in archivos)
                {
                    array = archivo.Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);
                    nombre = array[array.Length - 1];

                    FileInfo fi = new FileInfo(archivo);
                    rw.AddResource(nombre, Convert.ToBase64String(File.ReadAllBytes(fi.FullName)));
                }

                rw.Generate();
            }

            CodeDomProvider compiler = CodeDomProvider.CreateProvider("CSharp");
            CompilerParameters settings = new CompilerParameters();
            settings.GenerateExecutable = true;
            settings.OutputAssembly = archivoSalida;
            settings.CompilerOptions = @"/target:winexe";
            settings.TreatWarningsAsErrors = false;
            settings.EmbeddedResources.Add(resPath);

            settings.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            settings.ReferencedAssemblies.Add("System.dll");

            string codigoFuente = File.ReadAllText(Environment.CurrentDirectory + @"\Codigo\Program.cs");
            CompilerResults result = compiler.CompileAssemblyFromSource(settings, codigoFuente);
            
            return result;
        }
    }
}
